package cn.itcast.web.shiro;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * 自定义凭证匹配器，自己指定对用户输入的密码的加密方式
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

    /**
     * 密码校验方法
     *@Param token 封装用户输入的信息
     * @return 返回true表示用户输入的密码是正确的，否则错误
     * info:认证的信息
     */
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
          //需求：对用户输入的密码按照md5加密，并且email作为盐
        //1.获取用户输入的email
        String inputEmail = (String) token.getPrincipal();
        //2.获取用户输入的密码
        String inputPassword = new String((char[]) token.getCredentials());
        //3.对用户输入的密码加密，加盐，参数1.密码，参数2：盐
        String encodePwd = new Md5Hash(inputPassword, inputEmail).toString();
        //4.获取数据库正确的密码
        String dbPassword = (String) info.getCredentials();
        //5.进行比较：用户输入的加密后的密码与数据库中的密码进行比较


        return encodePwd.equals(dbPassword);
    }
}
